/*
 * XX公司源代码，版权归XX公司所有。 项目名称 : it-ogt-kq-common 创建日期 : 2023年8月16日 修改历史 : 1. [2023年8月16日]创建文件 by huangwu
 */
package com.hyt.it.ogt.kq.common.utils;

import java.util.ArrayList;
import java.util.List;

/**
 * 比较两个集合是否新增是否删除
 * 
 * @author huangwu
 */
public class CompareUtil {

    /**
     * 比较2个List，得出应该删除的 delList，和新增的addList T必须重写 hashCode和equals方法
     * 
     * @param dbEntityList
     * @param newDtoList
     * @param addList
     * @param delList
     */
    public static <T> void filterList(List<T> dbEntityList, List<T> newDtoList, List<T> addList, List<T> delList) {
        if (dbEntityList == null) {
            dbEntityList = new ArrayList<T>();
        }

        if (newDtoList == null) {
            newDtoList = new ArrayList<T>();
        }

        // 复制一个原始数组,将作为交集
        List<T> intersecList = new ArrayList<>(newDtoList);
        // 设新集A(newDtoList)，旧集 B(dbEntityList)，求出交集C(intersecList)
        intersecList.retainAll(dbEntityList);

        // A -C ,即addList
        newDtoList.removeAll(intersecList);
        addList.addAll(newDtoList);

        // B -C,即delList
        dbEntityList.removeAll(intersecList);
        delList.addAll(dbEntityList);
    }

    /**
     * 比较2个List，得出应该删除的 delList，和新增的addList,新旧交集remainList。 T必须重写 hashCode和equals方法
     * 
     * @param dbEntityList
     * @param newDtoList
     * @param addList
     * @param delList
     */

    public static <T> void filterList(List<T> dbEntityList, List<T> newDtoList, List<T> addList, List<T> delList, List<T> remainList) {
        if (dbEntityList == null) {
            dbEntityList = new ArrayList<T>();
        }

        if (newDtoList == null) {
            newDtoList = new ArrayList<T>();
        }

        // 复制一个原始数组,将作为交集
        List<T> intersecList = new ArrayList<>(newDtoList);
        // 设新集A(newDtoList)，旧集 B(dbEntityList)，求出交集C(intersecList)
        intersecList.retainAll(dbEntityList);

        // A -C ,即addList
        addList.addAll(newDtoList);
        addList.removeAll(intersecList);

        // B -C,即delList
        delList.addAll(dbEntityList);
        delList.removeAll(intersecList);

        remainList.addAll(intersecList);

    }
    
    
    public static void main(String[] args) {
        // 数据库查出现有的用户角色关系List:dbUserRoleList
        List<String> dbUserRoleList = new ArrayList<>();
        dbUserRoleList.add("ZZZZZZZZZZA149094616564551681875");
 
        // 前台传入新的 用户角色关系List：newUserRoleList
        List<String> newUserRoleList = new ArrayList<>();
        newUserRoleList.add("ZZZZZZZZZZA149094616564551681875");
        newUserRoleList.add("ZZZZZZZZZZA149094616564551683915");
 
        List<String> addList = new ArrayList<>();
        List<String> delList = new ArrayList<>();
        CompareUtil.filterList(dbUserRoleList, newUserRoleList, addList, delList);
 
        // 新增
        if (addList.size() > 0) {
            // 执行新增操作
        }
        // 删除
        if (delList.size() > 0) {
            // 执行删除操作
        }

    }

}
